package io.rehuo.modules.app.controller;

import io.rehuo.common.utils.Constants;
import io.rehuo.common.utils.R;
import io.rehuo.common.utils.file.FileNameUtil;
import io.rehuo.modules.app.annotation.Login;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.Arrays;

@RequestMapping("/app/file")
@RestController
public class UploadFileController {

    //文件扩展名校验
    private String arrsuffix[] = {"PNG","JPG","JPEG","BMP","GIF","SVG"};

    @Value("${file.path}")
    private String uploadPath;

    @Login
    @RequestMapping(value = "/upload",method = RequestMethod.POST)
    public R upload(@RequestParam(value="file") MultipartFile file, HttpServletRequest request) {
        try {
            if (file.isEmpty()) {
                return R.error("Tải hình ảnh máy chủ nội dung trống");
            } else {
                String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
                if (!Arrays.asList(arrsuffix).contains(suffix.toUpperCase())) {
                    return R.error("Hãy chọn tập tin có định dạng đúng");
                }
                //获取文件名称
                String filenameup = file.getOriginalFilename();

                //定义要上传文件 的存放路径
                String localPath = uploadPath + "/";
                filenameup = FileNameUtil.getFileName(filenameup);
                File dest = new File(localPath,filenameup);
                if (!dest.exists()) {
                    dest.mkdirs();
                }
                file.transferTo(dest);
                //拷贝文件到指定路径储存
                return R.ok("src", Constants.UPLOAD_BASE_URL + filenameup);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 返回
        return R.error("Lỗi không rõ sẽ dẫn đến lỗi tải lên");
    }
}
